#ifndef MP3_PLAYER_H
#define MP3_PLAYER_H

#include "miniaudio.h"
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <lvgl/demos/music/lv_demo_music.h>

// 全局变量声明
extern ma_engine engine;
extern ma_sound sound;
extern int is_paused;
extern char* msg;
extern int running;

// 函数声明

/**
 * @brief UTF-8 字符串转换为 GBK 编码
 * @param utf8_str UTF-8 编码的字符串
 * @return GBK 编码的字符串，需要调用者释放内存
 */
char* utf8_to_gbk(const char* utf8_str);

//检查音频设备
void check_audio_devices();
/**
 * @brief 获取播放状态文本
 * @param is_paused 是否暂停状态
 * @return 状态描述字符串
 */
const char* get_playback_status(int is_paused);

/**
 * @brief 初始化音频引擎
 * @note 初始化失败会直接退出程序
 */
void mp3_player_init_engine(void);

/**
 * @brief 根据id加载音乐文件
 * @note 加载失败会直接退出程序
 */
void mp3_load_for_track(uint32_t track_id);

/**
 * @brief 开始播放音乐
 */
void play_music(void);

/**
 * @brief 显示当前播放状态
 */
void show_status(void);

/**
 * @brief 释放音频资源并清理
 */
void mp3_free(void);

/**
 * @brief 设置当前播放的MP3
 * @param track_id 歌曲ID
 */
void lv_demo_music_mp3_set_track(uint32_t track_id);

/**
 * @brief 暂停当前播放的MP3
 */
void mp3_pause();

/**
 * @brief 播放当前播放的MP3
 */
void mp3_resume_playback();

/**
 * @brief 跳转到制定秒数
 * @param track_id 歌曲ID
 */
void seek_to_seconds(int32_t seconds);

#endif // MP3_PLAYER_H
